package main

import (
	"fmt"
	"github.com/sciter-sdk/go-sciter"
	"github.com/sciter-sdk/go-sciter/window"
	"log"
)

func base(root *sciter.Element) {
	// 通过ID选择元素
	ul, _ := root.SelectById("list")
	//获取元素内容
	text, _ := ul.Text()
	fmt.Println("text: ", text)

	// 获取html
	text, _ = ul.Html(true)
	fmt.Println("outerHtml: ", text)
	// no. of element
	n, _ := ul.ChildrenCount()
	fmt.Println("children count = ", n)
}

func addElement(root *sciter.Element) {
	// CREATE an element
	add, _ := sciter.CreateElement("li", "444")
	// set attr
	add.SetAttr("data", "add")
	// 通过标签和ID来选择元素, 类似jquery
	ul, _ := root.SelectFirst("ul#list")
	// 插入元素, 下标从0开始
	err := ul.Insert(add, 3)
	if err != nil {
		log.Fatal("添加元素失败")
	}
}

func deleteElement(root *sciter.Element) {
	ul, _ := root.SelectFirst("ul#list")
	// 第n个子元素, index start with 0
	li, _ := ul.NthChild(0)
	// 删除元素
	li.Delete()

	// 使用css选择器删除元素
	li_css, _ := ul.SelectFirst("ul#list>li:nth-child(2)")
	li_css.Delete()
	log.Println("删除元素成功")

}
func updElement(root *sciter.Element) {
	li, _ := root.SelectFirst("ul#list>li:nth-child(1)")
	// set style
	li.SetStyle("color", "yellow")
	// SIH = set inner html, 设置内部html的策略, 替换旧内容
	li.SetHtml("<a href='http://www.baidu.com'> baidu.com </a>", sciter.SIH_REPLACE_CONTENT)
	// 追加
	li.SetHtml("哈哈", sciter.SIH_APPEND_AFTER_LAST)
	// SET ATTR
	li.SetAttr("test", "test")
	li2, _ := root.SelectFirst("ul#list>li:nth-child(2)")
	li2.SetText("新的文本")

}

func selectElement(root *sciter.Element) {
	root.Select("ul#list>li")
	root.SelectFirst("ul#list>li")
	root.SelectById("list")
	root.SelectParent("li", 1)
	// 选择唯一匹配, 没有或匹配多个, 可能引发Panic
	root.SelectUnique("ul#list>li:nth-child(1)")

}

func main() {
	// DefaultWindowCreateFlag = SW_TITLEBAR | SW_RESIZEABLE | SW_CONTROLS | SW_MAIN | SW_ENABLE_DEBUG
	// DefalultRect= &Rect{0, 0, 300, 400}}
	w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect)
	//sciter.SetOption()
	if err != nil {
		log.Fatal(err)
	}
	// 设置标题
	w.SetTitle("文本 html")
	// sciter不支持<mata charset="utf-8"/>
	// 使用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	html := `
		<html>
		<head>
			<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		</head>
		<body>
			<ul id="list" name="list">
				<li>111</li>
				<li>22中文 哈哈哈</li>
				<li>333</li>
			</ul>
		</body>
		</html>
		`
	// load html, start with first char
	w.LoadHtml(html, "")
	// 窗口获取根元素, 这里是<html>
	root, _ := w.GetRootElement()
	// dom操作
	base(root)
	addElement(root)
	deleteElement(root)

	updElement(root)
	selectElement(root)
	// show window
	w.Show()
	// 进入消息循环
	w.Run()
}
